package com.parking.order.client.inter;

import com.parking.common.core.model.Result;
import com.parking.order.client.dto.UserAccountDto;
import com.parking.order.client.dto.UserCarDto;
import com.parking.order.client.dto.UserInfoDto;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Feign接口调用 用户模块
 * */
@FeignClient(name = "parking-user", path = "/user")
public interface UserClient {
    /**
     * 根据ID查询用户账号
     * 参数: 用户Id userId
     * 返回: 用户Id userId
     *      用户账号 userAccount
     *      用户信息Id userInfoId
     * 方法: 1.判断userId是否存在对应的用户账号 若不存在则抛异常
     *      2.判断对应的用户帐号的状态是否是正常的 若不是则抛异常
     *      3.将用户账号放入Dto返回
     * */
    @GetMapping("/userAccount/selectUserAccountById")
    @ApiOperation("根据ID查询用户账号")
    Result<UserAccountDto> selectUserAccountById(@RequestParam("userId") Integer userId);
    /**
     * 根据Id查询用户信息
     * 参数: 用户信息Id userInfoId
     * 返回: 用户名称 userInfoName
     *      用户电话 userInfoTel
     *      用户年龄 userInfoAge
     *      用户头像 userInfoImg
     *      用户账号Id  userAccountId
     * 方法: 1.判断userInfoId是否存在对应的用户信息 若不存在则抛异常
     *      2.判断对应的用户信息是否实名 若不是则抛异常
     *      3.将用户信息放入Dto返回
     * */
    @GetMapping("/userInfo/selectUserInfoById")
    @ApiOperation("根据Id查询用户信息")
    Result<UserInfoDto> selectUserInfoById(@RequestParam("userInfoId") Integer userInfoId);
    /**
     * 根据Id查询用户车辆
     * 参数: 用户车辆Id userCarId
     * 返回: 车牌号 userCarPlate
     *      车辆联系人 carContacts
     *      车辆联系人电话 carContractsTek
     *      用户信息Id    userInfoId
     * 方法: 1.判断userCarId是否存在对应的用户车辆信息 若不存在则抛异常 若被删除也抛异常
     *      3.将用户车辆放入Dto返回
     * */
    @GetMapping("/userCar/selectUserCarById")
    @ApiOperation("根据Id查询用户车辆")
    Result<UserCarDto> selectUserCarById(@RequestParam("userCarId") Integer userCarId);
}
